#include "ModuleDelay.h"

void ModuleDelay::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
  layout=new QVBoxLayout(win);
	sb_delay=new QSpinBox(win);
	sb_delay->setPrefix("delay=");
	sb_delay->setRange(0,100);	
	layout->addWidget(sb_delay);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleDelay::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleDelay::process()
{
	return fifo.front();
}
////////////////////////////////////////////////////////////////////////////////
void ModuleDelay::setInput(int n,const cv::Mat & m)
{
	if(n==0)
	{	
		currentFrame=m.clone();
		fifo.push_back(currentFrame);
		while(fifo.size()>(sb_delay->value()+1))
		{
			fifo.pop_front();
		}
	}
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleDelay::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleDelay::getName()
{
	return tr("Delay");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleDelay::nbInputs()
{
	return 1;
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleDelay::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==1)
	{
		sb_delay->setValue(list_params[0].toInt());
		return true;
	}
	else
	{
		return false;
	}	
}

QCVModuleInterface * ModuleDelay::clone()
{
	return new ModuleDelay;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleDelay::getParams()
{
	return QString::number(sb_delay->value());
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleDelay::help(int id)
{
	if(id==-2)
	{
		return tr("Permet de retarder les images");
	}
	else if(id==-1)
	{
		return tr("image");
	}
	else if(id==0)
	{
		return tr("image");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleDelay_plugin,ModuleDelay);  
